AWS Managed Microsoft AD と Azure AD Connect v2 をつかってAzure ADへID同期(パスワードハッシュ同期)しようとして失敗した話
しばたです。
以前、AWS Managed Microsoft AD と Azure AD Connect v2 をつかってパススルー認証によりID同期を行う記事を書きました。
今回同様の手順でパスワードハッシュ同期によるID同期をためしてみたのですが、どうにも上手いかなかったのでその顛末を共有します。
結末
最初に結末から。
AWS Managed Microsoft ADの最高権限を持つAdmin
ユーザーを使いAzure ADとのID同期(パスワードハッシュ同期)を試み、ユーザー同期はできたもののパスワードハッシュ同期に失敗しました。
エラーの詳細を調べると「ディレクトリオブジェクトのレプリケーションエラー(権限不足)」が発生しており、どうあがいても権限を与えることができませんでした。
WEB上に存在する情報では過去にパスワードハッシュ同期ができた様ですが、残念ながら現時点においてAWS Managed Microsoft ADとAzure AD Connect v2の組み合わせではパスワードハッシュ同期は出来ませんでした。
(もしかしたらAzure AD Connect v1ならできるのかもしれません、が、v1はもうすぐ廃止されます)
失敗してみた
ここからは具体的にどの様な状況になったのか解説します。
まず最初に前掲の記事をベースにAzure AD Connect v2をインストールします。
(今回はVer.2.0.91を使っています)
そして同期用のドメインユーザーをAWS Managed Microsoft ADの管理者であるAdmin
ユーザーにします。
Azure AD Connect v2のインストール
この状態でAzure AD Connectをインストールし、初期設定ウィザードを次の様に行いました。
サインオン方式に「パスワードハッシュ同期」を指定。
Azure ADのグローバル管理者アカウントを指定。
ディレクトリの追加をAdmin
ユーザーで実施。
あとは基本デフォルト指定で作成。
(同期対象は絞っている)
(インストール中)
Azure AD Connect v2インストール後の状態
ここでAzure AD側を確認するとユーザー同期ができており、一見上手くいっている様にみえるのですが、実際に同期したユーザーでサインインしようとすると正しいパスワードを入力してもエラーとなってしまいます。
(ユーザー同期はしたが利用できない状態)
初回ログイン時にパスワード変更を求められる、などの問題ではない感じでした。
そこでAzure AD ConnectをインストールしたEC2上で以下のPowerShellコマンドを実行し同期の状態を確認すると、「パスワードハッシュ同期の機能は有効になっているが、実際の同期に失敗している」状態であることが分かりました。
# 要管理者権限
# パスワードハッシュ同期の機能自体は有効になっている
PS C:\> Get-ADSyncAADCompanyFeature
PasswordHashSync : True
ForcePasswordChangeOnLogOn : False
UserWriteback : False
DeviceWriteback : False
UnifiedGroupWriteback : False
GroupWritebackV2 : False
# 同期コマンドも一見上手くいっている様に見える
PS C:\> Start-ADSyncSyncCycle -PolicyType Delta
Result
------
Success
# パスワードハッシュ同期の同期が正常に行われていない : PasswordSyncLastCycleStatus = Failed
PS C:\> Get-ADSyncPartitionPasswordSyncState
ConnectorId : b891884f-051e-4a83-95af-2544101c9083
DN : default
PasswordSyncLastSuccessfulCycleStartTimestamp : 0001/01/01 0:00:00
PasswordSyncLastSuccessfulCycleEndTimestamp : 0001/01/01 0:00:00
PasswordSyncLastCycleStartTimestamp : 0001/01/01 0:00:00
PasswordSyncLastCycleEndTimestamp : 0001/01/01 0:00:00
PasswordSyncLastCycleStatus : None
ConnectorId : 1f1329a5-ed33-4e9f-9c73-c6399aaedcc1
DN : DC=shibata,DC=local
PasswordSyncLastSuccessfulCycleStartTimestamp : 0001/01/01 0:00:00
PasswordSyncLastSuccessfulCycleEndTimestamp : 0001/01/01 0:00:00
PasswordSyncLastCycleStartTimestamp : 2022/01/22 3:53:10
PasswordSyncLastCycleEndTimestamp : 2022/01/22 3:53:10
PasswordSyncLastCycleStatus : Failed
トラブルシューティング実行結果
この原因についてAzure AD Connectの「トラブルシューティング」から確認してみたところ、下図の様にエラーがある旨が確認できました。
メッセージにあるイベントID 611のイベントログの内容はこんな感じでレプリケーションの権限不足であることがわかります。
Password hash synchronization failed for domain: shibata.local, domain controller hostname: WIN-252E5NFBSHE.shibata.local, domain controller IP address: 10.0.21.93. Details:
Microsoft.Online.PasswordSynchronization.DirectoryReplicationServices.DrsException: RPC Error 8453 : レプリケーション アクセスが拒否されました。. There was an error calling _IDL_DRSGetNCChanges.
当然ですが個別ユーザーに対する同期も失敗しています。
最後の手段としてPowerShellからSet-ADSyncPasswordHashSyncPermissions
コマンドを使い直接権限付与を試みたものの失敗に終わりました...
#
# (要管理者権限) 事前に別途 RSAT-AD-Tools のインストールが必要
#
Install-WindowsFeature RSAT-AD-Tools
#
# (要ドメイン管理者権限) 専用モジュールのインポート
#
Import-Module "C:\Program Files\Microsoft Azure Active Directory Connect\AdSyncConfig\AdSyncConfig.psm1"
# パスワードハッシュ同期に対する権限を直接付与
$params = @{
ADConnectorAccountName = 'admin'
ADConnectorAccountDomain = 'shibata.local'
Confirm = $false
}
Set-ADSyncPasswordHashSyncPermissions @params
GrantAclsNoInheritance : 指定された操作は LDAP エラーで失敗しました: 00000005: SecErr: DSID-03152B09, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0 権限が不十分です 。 アクセスが拒否されました。 コマンドが正常に終了しませんでした。
【追記】サポートに確認してみた
本記事を公開した後でAWSサポートにAWS Managed Microsoft ADでAzure AD Connect v2のパスワードハッシュ同期が利用可能なのか確認してみました。
その結果、本記事の通り「権限不足となり非サポートの構成である」旨の回答を頂きました。
(ケース内容に関しブログでの公開許可を得ています)
過去(Azure AD Connect v1)がどうだったかまでは確認しませんでしたが、少なくとも2022年1月現在Azure AD Connect v2のパスワードハッシュ同期はAWSとして非サポートですのでパススルー認証を使う必要があります。
終わりに
以上となります。
AWS Managed Microsoft ADの管理者ユーザーを使って権限不足になるのでこれ以上打つ手は無いと思います。
もし何か良い感じの抜け道があれば教えて頂きたいです。
サポートに確認した結果非サポートの構成でしたので、Azure AD Connect v2を使うときはパススルー認証を選んでください。